<?php if (!defined('INDEX')) { trigger_error("Index is not defined!", E_USER_ERROR); exit(); }
/**
 * Класс-обёртка для сервиса закладок delicious.com
 *
 * @package      habrabookmarks
 *
 * @author       Max Kamashev <max.kamashev@floscoeli.com>
 * @copyright    floscoeli.com ©2009
 * @license      http://opensource.org/licenses/gpl-3.0.html
 * @version      SVN: $Id: delicious.service.php 22 2009-02-28 18:41:50Z M.Kamashev $
 *
 * settings:     ts: 4 spaces, eof: lf (unix), codepage: UTF-8
 */
class delicious extends Service {

    public $export = FALSE;
    public $import = FALSE;

    /**
     * Преобразует дату php в дату требуемую delicious
     *
     * @param date $sDate Дата в формате php
     * @author Edward Eliot
     * @url http://phpdelicious.com
     * @access private
     * @return string
     */
    private function ToDeliciousDate($sDate){
        return date('Y-m-d\TH:i:s\Z', $sDate);
    }

    /**
     * Добавить закладку
     *
     * @param string $link Ссылка
     * @param string $header Заголовок
     * @param string $descr Описание поста
     * @param array $tags Массив тегов
     * @param date $date Дата добавления поста, в mysql-формате YYYY-MM-DD HH:MM:SS
     * @access private
     * @return bool
     */
    private function add( $link='', $header='', $descr='', $tags=array(), $date='') {
        // Собираем строку запроса для добавления закладки
        // Кстати, вот ссылка на API http://delicious.com/help/api#posts_add
        $cmd = "https://api.del.icio.us/v1/posts/add?";
        $cmd .= "&url=".urlencode($link);
        $cmd .= "&description=".urlencode($header);
        $cmd .= "&extended=".urlencode($descr);

        //Обрабатываем массив на соответствие стандартам тегов для делишеса
        $tags_new = array();
        foreach ($tags as $tag) {
            $tags_new[] = mb_ereg_replace(' ', '_', $tag);
        }
        $cmd .= "&tags=".urlencode(implode(' ', $tags_new));
        if (!empty($date)) {
            $cmd .= "&dt=".$this->ToDeliciousDate($date);
        }

        // Инициализируем curl
        $curl = curl_init();
        curl_setopt_array($curl,
            array(
                CURLOPT_URL => $cmd,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_USERAGENT => $this->user_agent,
                CURLOPT_CONNECTTIMEOUT => $this->timeout,
                CURLOPT_TIMEOUT => $this->transfer_timeout,
                CURLOPT_DNS_CACHE_TIMEOUT => $this->dns_timeout,
                CURLOPT_USERPWD => urlencode($this->login).":".urlencode($this->password)
            )
        );
        if ($result = curl_exec($curl)) {
            switch (curl_getinfo($curl, CURLINFO_HTTP_CODE)) {
                case 200:
                    return $result;
                    break;
                case 401:
                    trigger_error("delicious: Указан не верный логин или пароль.", E_USER_NOTICE);
                    break;
                case 503:
                    trigger_error("delicious: Успокойтесь и поставьте бОльшую задержку!", E_USER_NOTICE);
                default:
                    trigger_error("delicious: Ошибка соединения.", E_USER_NOTICE);
            }
        }
        curl_close($curl);
        return FALSE;
    }

    /**
     * Метод для экспорта закладок в сервис delicious
     *
     * @param array mixed $bookmarks Массив с закладками
     * @return bool
     */
    public function exportBookmarks($bookmarks) {
        if (count($bookmarks) == 0) {
            trigger_error("Нет закладок для экспорта.", E_USER_NOTICE);
        }
        print "Успешно импортированные закладки:\n<hr />";
        foreach ($bookmarks as $bookmark) {
            if ( $this->add($bookmark['link'],$bookmark['header'],$bookmark['descr'],$bookmark['tags'],$bookmark['date']) ) {
                print $bookmark['header'] . ".. OK\n";
            }
            sleep($this->delay);
        }
        return TRUE;
    }

    /**
     * @see services/Service#importBookmarks()
     */
    public function importBookmarks() {
    }

    /**
     * @see services/Service#importFormRender()
     */
    public function importFormRender() {

    }

    /**
     * @see services/Service#exportFormRender()
     */
    public function exportFormRender() {

    }

   /**
     * @see services/Service#exportValidate()
     */
    public function exportValidate() {

    }

    /**
     * @see services/Service#importValidate()
     */
    public function importValidate() {

    }

    /**
     * @see services/Service#description()
     */
    public function description() {
       return "Самый известный сервис социальных закладок от Yahoo. Доступен по адресу <a href='http://delicious.com/'>delicious.com/</a>.";
    }

    /**
     * @see services/Service#help()
     */
    public function help() {
        return "";
    }

    /**
     *
     *
     */
    public function formLogin() {
        if ( count($_POST)>0 && isset($_POST['delicious_login'])) {
            $login    = htmlspecialchars(trim($_POST['delicious_login']));
            $password = htmlspecialchars(trim($_POST['delicious_login']));
        }
        return "";
    }
}
